/*|¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯|
  | Métodos Numéricos I - Trabalho.2  |
  |      (Sistemas de Equações)       |
  |      ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯       |
  | Equipe:                           |
  | > Bruno Anderson (líder)          |
  | > Cristtiano                      |
  | > Dionisio                        |
  | > Mauricio Figueiredo             |
  | > Rafael Cruz                     |
  | > Vitor Ary                       |
  |___________________________________|*/

// É Linux ou é Windows?
#ifdef linux      // Sistema Operacional: Linux.
    #define sistema_operacional 0
#else
    #ifdef _WIN32 // Sistema Operacional: Windows.
        #define sistema_operacional 1
    #endif
#endif
// Vixe! Não é nenhum dos 2...
#ifndef sistema_operacional
    #error Sistema Operacional desconhecido!!! So rodo no Linux ou no Windows!!!
#endif

/*** LIXUX - INCLUDES E DEFINES ***/
#if (sistema_operacional == 0)
    #include "Extras/fuba_linux.h"
#endif

/*** WINDOWS - INCLUDES E DEFINES ***/
#if (sistema_operacional == 1)
    #include "Extras/fuba_win.h"
#endif

/*** DEFINES do programa ***/
// NADA!

/*** INCLUDES do programa ***/
#include <iostream>
using namespace std;

// Classes:
#include "Classes/matriz.h"
#include "Classes/gauss.h"
#include "Classes/jacobi.h"

int main(void) // PRINCIPAL //
{
    // Variáveis do MAIN:
    int escolha;

    do{// MENU PRINCIPAL //
        limpar_tela();
        cout <<"#=============================================================#"<<endl;
        cout <<"#             [Metodos Numericos I - Trabalho.2]              #"<<endl;
        cout <<"#                   (Sistemas de Equacoes)                    #"<<endl;
        cout <<"#=============================================================#"<<endl;
        cout <<"\n\n"<<endl;
        cout <<"\t(1) Inserir Dados"<<endl;
        cout <<"\t(0) Sair do programa" << endl;
        cout << "Opcao:   ";
        cin >> escolha;
        switch(escolha)
        {
            case 1:
            {
                int n;
                float valor;
                limpar_tela();
                cout <<"#=============================================================#"<<endl;
                cout <<"#             [Metodos Numericos I - Trabalho.2]              #"<<endl;
                cout <<"#                   (Sistemas de Equacoes)                    #"<<endl;
                cout <<"#=============================================================#"<<endl;
                cout << "\n\n"<<endl;
                cout << "\tDimensao da Matriz: ";
                cin >> n;
                cout << "\n\n";

                matriz* m1 = new matriz(n);
                m1->alocar(n);

                for(int lin=0; lin<n; lin++)
                {
                    for(int col=0; col<n; col++)
                    {
                        error:
                        cout << "\tPosicao "<< lin << col << ": ";
                        cin >> valor;
                        if( valor < 0 )
                        {
                            cout << "\t\aValor invalido!!!" << endl;
                            goto error;
                        }
                        m1->set_aij(lin,col,valor);
                    }
                }
                cout << "\t";
                pausar();
                cout << "\n\n";

                jacobi* j1 = new jacobi();
                j1->matrizG = m1;
                cout << "\tDeterminante = " << j1->calculo_metodo() << endl;
                cout << "\t";

                delete m1;
                delete j1;
                pausar();
                break;
            }
            case 0:
            {
                return( 0 );
                break;
            }
            default:
            {
                cout << "\t\aDados invalidos!!!";
                break;
            }
        }// fim do "switch(escolha)" //
      }while(escolha!=0);// fim do "MENU PRINCIPAL" //

    return(0);
}
